package com.lj.back.manage.scaffold.module.sys.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.lj.back.manage.scaffold.module.sys.DTO.*;
import org.springframework.transaction.annotation.Transactional;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.Set;

/**
 * 后台用户service
 * @author lv
 * @version 1.0.0
 */
public interface SysUserService {

    /**
     * 根据唯一值获取用户
     * @param key 匹配关键字
     * @return
     */
    SysUserDTO getUser(@NotBlank(message = "{key.notnull}") String key);

    /**
     * 根据Token获取用户信息
     * @param token token
     * @return
     */
    SysUserDTO getUserByToken(@NotBlank(message = "{token.notnull}") String token);

    /**
     * 获取用户权限列表
     * @param userId 用户ID
     * @return 权限列表
     */
    Set<String> listUserPermissions(@NotNull(message = "user.id.notnull") Long userId);

    /**
     * 获取用户角色列表
     * @param userId
     * @return
     */
    Set<SysRoleDTO> listUserRoles(@NotNull(message = "user.id.notnull") Long userId);

    /**
     * 分页查询后台用户列表
     * @param pageQuery
     * @return
     */
    IPage<SysUserDTO> listUsers(SysUserPageQuery pageQuery);

    /**
     * 新增用户
     * @param sysUserDTO
     * @return 新增用户ID
     */
    Long addUser(SysUserDTO sysUserDTO);

    /**
     * 修改用户信息
     * @param userDTO
     * @return
     */
    boolean updateUser(SysUserUpdateDTO userDTO);

    /**
     * 删除用户
     * @param userId
     * @return
     */
    @Transactional(rollbackFor = Throwable.class)
    boolean deleteUser(@NotNull(message = "user.id.notnull") Long userId);

    /**
     * 重置用户信息
     * @param resetUser
     * @return
     */
    boolean resetUserInfo(SysResetUserDTO resetUser);
}
